/* Copyright (C) 2014-2016 Dan Chapman <dpniel@ubuntu.com>

   This file is part of Dekko email client for Ubuntu Devices/

   This program is free software; you can redistribute it and/or
   modify it under the terms of the GNU General Public License as
   published by the Free Software Foundation; either version 2 of
   the License or (at your option) version 3

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef ATTACHMENTSDOWNLOADER_H
#define ATTACHMENTSDOWNLOADER_H
#include <QTemporaryFile>
#include <QNetworkReply>
#include <QPersistentModelIndex>
#include <QBuffer>

namespace Imap
{
namespace Mailbox
{
class Model;
class TreeItem;
class TreeItemPart;
}
}

namespace Dekko {

namespace Utils {

class AttachmentDownloader : public QObject
{
    Q_OBJECT
public:
    AttachmentDownloader(QObject *parent, const QModelIndex &index);

    Q_INVOKABLE void fetchPart();
    Q_INVOKABLE void cleanTmpFile();
public slots:
    void onOpenFailed(QString);
    void openDownloadedAttachment();
signals:
    void downloadProgress(qint64 downloaded, qint64 total);
    void downloadComplete(QString url);
    void readyRead();
    void error(QString error);

private slots:
    void handleModelDataChanged(const QModelIndex &topLeft, const QModelIndex &btmRight);
    void handleAttachmentDataChanged();
    void handleAttachmentDataTransfered();
    void slotFileNameRequestedOnOpen();

private:
    QPersistentModelIndex m_partIndex;
    QTemporaryFile *m_tmpFile;
    Imap::Mailbox::TreeItemPart *m_msgPart;
    QBuffer m_buffer;
};

}
}
#endif // ATTACHMENTSDOWNLOADER_H
